# -*- coding: utf8 -*-
from human import Player
from human import Enemy
from tmap import Map
from skill import Skill
from item import Item
from equipment import Equipment
import unittest

class BtTest(unittest.TestCase):
    '''挑战严旭大魔王'''
    def test_fighting(self):
        paopao=Player(mhp=617,hp=600,mov=2,atk=500,defend=150,exp=0,name='ボボ')        #玩家大包
        fattan=Player(mhp=1000,hp=1000,mov=1,atk=300,defend=300,exp=0,name='谭胖子')   # 玩家谭胖子
        furong=Player(mhp=888,hp=888,mov=1,atk=480,defend=160,exp=80,name='Mr.FR')    #玩家芙蓉
        yanrujia=Enemy(mhp=49820,hp=49820,mov=4,atk=500,defend=188,name='严如家',side="enemy")
        tmap=Map([[paopao,fattan,furong,0,0],              # 第0回合的地形图  p,t,f,0,0
                      [0,0,0,0,0],                         #                0,0,0,0,0          
                      [0,0,0,0,0],                         #                0,0,0,0,0
                      [0,0,0,0,0],                         #                0,0,0,0,0
                      [0,0,0,0,yanrujia]])                 #                0,0,0,0,y
        tiejian = Equipment(atk=150,defend=50,name = '铁剑')    #武器铁剑
        tiefu = Equipment(atk=200,name='铁斧')                  #武器铁斧
        tieqiang = Equipment(atk=300,defend=100,name='铁枪')    #武器铁枪
        testSword = Equipment(atk=10000,name='测试剑')  #测试用剑
        dragonSword = Equipment(atk=1000,defend=100,lv=10,name='龙剑') #神器：龙剑
        yao=[]    # 回复药
        red=Item(hp=200)                   #HP回复200的药
        for i in range (50):
            yao.append(red)
        tmap.missionStart()           #游戏开始
        self.assertEqual(yanrujia.position,(4,4))  #判断严如家位置
        tmap.mapRoundStart(flug='hero')    #第1回合开始，英雄开始行动
        tmap.fly(paopao,1,0)
        paopao.equip(testSword)  #大包装备了测试剑
        self.assertEqual(paopao.newAtk,10500) #测试攻击力
        fattan.equip(tieqiang) #谭胖子装备了铁枪
        self.assertEqual(fattan.newDefend,400)
        self.assertEqual(furong.equip(dragonSword),False)  #判断武器装备失败(等级不够)
        self.assertEqual(furong.newAtk,480)         #判断装备失败后属性不变
        furong.equip(tiefu)    #芙蓉装备了铁斧子
        self.assertEqual(furong.newAtk,680)    #判断芙蓉的攻击力为600
        self.assertEqual(tmap.fly(paopao,2,0),False)     #大包再移动，不能
        tmap.mapRoundStart(flug="enemy")       #敌人开始行动
        tmap.fly(yanrujia,2,2)                 #如家移动到2，2
        self.assertEqual(tmap.getPosition(yanrujia),(2,2))  #判断如家的位置
                                                            # 第1回合结束后位置图
                                                            # 0,t,f,0,0
                                                            # p,0,0,0,0
                                                            # 0,0,y,0,0
                                                            # 0,0,0,0,0
                                                            # 0,0,0,0,0
        tmap.mapRoundStart(flug='hero')    #第2回合开始，英雄行动
        tmap.fly(furong,1,2) 
        self.assertEqual(furong.attack(yanrujia,0),(49820-680+188,False))  #芙蓉尝试攻击严如家#平伤不暴击
        self.assertEqual(furong.exp,100)     #芙蓉攻击了1次，经验值长20
        self.assertEqual(furong.heroLV,2)    #判断芙蓉升及
        self.assertEqual(paopao.attack(yanrujia),False)   #泡泡尝试攻击,攻击失败，距离太远
        paopao.equip(tiejian)   #泡泡装备铁剑，替换掉了测试剑
        paopao.leftEquip(testSword)  #泡泡移除测试剑
        self.assertEqual(paopao.newAtk,650) #测试更换武器后的攻击力
        fattan.useItem(red)                #谭胖子使用药水1瓶
        self.assertEqual(fattan.hp,1000)   #满血喝药，HP不变
        tmap.mapRoundStart(flug='enemy')   #第2回合敌人开始行动
        tmap.fly(yanrujia,1,1)             #严如家移动到（1，1）
        yanrujia.attack(fattan,0)            #严如家攻击了谭胖子
        self.assertEqual(fattan.hp,800)    # 谭胖子HP剩余800
        self.assertEqual(fattan.mhp,1000) 
        self.assertEqual(fattan.attack(yanrujia),False) #谭胖子想攻击严如家 ，失败Mround不足
                                           # 第2回合结束
                                           # 现在的地形
                                           # 0,t,0,0,0
                                           # p,y,f,0,0
                                           # 0,0,0,0,0
                                           # 0,0,0,0,0
                                           # 0,0,0,0,0
        c=0                                           
        for i in range(0,1000):            #第3---1003回合开始，英雄开始
            tmap.mapRoundStart()           #攻击1000次测暴击率
            hp,b=fattan.attack(yanrujia)
            if b:
                self.assertNotEqual(yanrujia.hp,48916)
                c=c+1
            else:
                self.assertEqual(yanrujia.hp<=48916,True)
            yanrujia.hp=49328
        print c
        self.assertEqual(c>=30,True)
        self.assertEqual(c<=70,True)
        self.assertEqual(fattan.equip(dragonSword),True) #等级达到 ，谭胖子装备了神器
        for i in range(0,40):            #判断ISOVER方法
            tmap.mapRoundStart()
            fattan.attack(yanrujia)
            furong.attack(yanrujia)
        self.assertEqual(yanrujia.isOver(),True)
        print 'mission complete'
if __name__ == '__main__':
    unittest.main()
        
                                 
    
        
